<HTML><HEAD><TITLE>session_sql_query(++Session, +ResultTemplate, ++SQLQuery, -Cursor)</TITLE>
</HEAD><BODY>[ <A HREF="index.html">library(dbi)</A> | <A HREF="../../index.html">Reference Manual</A> | <A HREF="../../fullindex.html">Alphabetic Index</A> ]
<H1>session_sql_query(++Session, +ResultTemplate, ++SQLQuery, -Cursor)</H1>
Executes a SQL query on the database server.
<DL>
<DT><EM>Session</EM></DT>
<DD>A session handle
</DD>
<DT><EM>ResultTemplate</EM></DT>
<DD>Template defining the types of results tuple (structure)
</DD>
<DT><EM>SQLQuery</EM></DT>
<DD>A SQL statement query (string)
</DD>
<DT><EM>Cursor</EM></DT>
<DD>Returned cursor handle
</DD>
</DL>
<H2>Description</H2>
<P>
 Executes a SQL query on the database server. The predicate returns in
 Cursor the cursor handle for this SQL query, and the results can then be
 retrieved using cursor_*_tuple family of predicates. 
</P><P>
 The SQL query returns result in tuples of N elements each. Each tuple is
 mapped to a Prolog structure of arity N. ResultTemplate is a structure of
 arity N specifying the types of the return data for ECLiPSe. See the
 general description of this library or the manual for a description of 
 the template specification.
 </P><P>
 The SQL query must be valid for the DBMS to execute. It can contain
 NULL characters, i.e. it can contain binary data.
 </P><P>
 This predicate is called with default options for the cursor, i.e. it is
 equivalent to calling session_sql_query/5 with an empty Options list.

<H3>Exceptions</H3>
<DL>
<DT><EM>(5) type error </EM>
<DD>Session is not a valid session handle, or SQLQuery not a string, or ResultTemplate not a structure
<DT><EM>(dbi_error) </EM>
<DD>Error from DBMS while executing SQLQuery.
<DT><EM>(dbi_bad_template) </EM>
<DD>ResultTemplate has the wrong arity
</DL>
<H2>Examples</H2>
<PRE>
  check_overdraft_limit(Session, Account) :-
      L = ["select count(id) from accounts \
          where     id = ",Account," and balance &lt; overdraft"],
      concat_string(L,SQL),
      session_sql_query(Session,c(0),SQL,OverdraftCheck),
      cursor_next_tuple(OverdraftCheck,c(Count)),
      Count = 0.
</PRE>
<H2>See Also</H2>
<A HREF="../../lib/dbi/session_sql_query-5.html">session_sql_query / 5</A>, <A HREF="../../lib/dbi/cursor_next_tuple-2.html">cursor_next_tuple / 2</A>, <A HREF="../../lib/dbi/cursor_all_tuples-2.html">cursor_all_tuples / 2</A>, <A HREF="../../lib/dbi/cursor_N_tuples-4.html">cursor_N_tuples / 4</A>, <A HREF="../../lib/dbi/session_sql_prepare_query-5.html">session_sql_prepare_query / 5</A>, <A HREF="../../lib/dbi/cursor_close-1.html">cursor_close / 1</A>
</BODY></HTML>
